package com.project.service;

import com.project.entity.StudentInfo;
import com.project.myBeans.StudentInfoDetail;

import java.util.List;

/**
 * Created by WheelChen on 2017/3/20.
 */
public interface StudentInfoService {
    /**
     * author: WheelChen
     * date: 2017-5-1
     * function: 增加学生信息
     *
     * @param studentInfo 学生信息
     * @return
     */
    int add(StudentInfo studentInfo);

    /**
     * author: WheelChen
     * date: 2017-5-1
     * function: 根据用户id删除学生
     *
     * @param userId 学生的userId
     * @return
     */
    int removeOneByUserId(Integer userId);

    /**
     * author: WheelChen
     * date: 2017-5-1
     * function: 根据用户id修改学生信息
     *
     * @param studentInfo 学生信息
     * @return
     */
    int modifyByUserIdSelective(StudentInfo studentInfo);

    /**
     * author: WheelChen
     * date: 2017-5-1
     * function: 根据userId寻找学生
     *
     * @param userId 学生的userid
     * @return
     */
    StudentInfo findOneByUserId(Integer userId);

    /**
     * author: WheelChen
     * date: 2017/7/28
     * function: 根据id修改学生信息表
     *
     * @param studentInfo
     * @return
     */
    int modifyOneById(StudentInfo studentInfo);

    /**
     * author: WheelChen
     * date: 2017-5-26
     * function: 根据用户id修改学生信息
     * @param jsonStr 学生表以及外键关联的所有表
     * @return
     */
//    int save(String jsonStr);

    /**
     * author: WheelChen
     * date: 2017/6/30
     * function: 根据id查询学生信息
     *
     * @param id
     * @return
     */
    StudentInfo findById(Integer id);

    /**
     * author: WheelChen
     * date: 2017/7/1
     * function: 根据userId查找学生详情信息
     *
     * @param userId
     * @return
     */
    StudentInfoDetail findDetailByUserId(Integer userId) throws Exception;

    /**
     * author: WheelChen
     * date: 2017/6/30
     * function: 根据id查找学生详情信息
     *
     * @param id
     * @return
     */
    StudentInfoDetail findDetailById(Integer id) throws Exception;

    /**
     * author: WheelChen
     * date: 2017/7/6
     * function: 模糊查找 + 分页
     *
     * @param studentInfo
     * @return
     */
    List<StudentInfo> findBatchByCondition(StudentInfo studentInfo);

//    List<StudentInfoDetail> findDetailByCondition(StudentInfoDetail studentInfoDetail);

    /**
     * author: WheelChen
     * date: 2017/7/26
     * function: 根据学校实习指导老师的教师信息表id计算被指导的实习学生人数
     * 
     * @param internAdvisor 学校实习指导老师的教师信息表id
     * @return
     */
    int countByInternAdvisor(Integer internAdvisor);

    /**
     * author: WheelChen
     * date: 2017/7/28
     * function: 新增学生详细信息 （影响用户表 + 学生信息表）
     *
     * @param studentInfoDetail 学生详细信息
     * @return
     */
    void addDetailOne(StudentInfoDetail studentInfoDetail) throws Exception;

    /**
     * author: WheelChen
     * date: 2017/7/29
     * function:  修改学生详细信息 （影响用户表 + 学生信息表）
     *
     * @param studentInfoDetail
     * @return
     */
    void modifyDetailOne(StudentInfoDetail studentInfoDetail) throws Exception;

    /**
     * author: WheelChen
     * date: 2017/7/1
     * function: 根据学生信息表记录查找学生详情信息
     *
     * @param studentInfo
     * @return
     */
    StudentInfoDetail findDetailByStudentInfo(StudentInfo studentInfo) throws Exception;

    /**
     * author: WheelChen
     * date: 2017/9/18
     * function: 根据系id批量查找学生信息
     *
     * @param departmentId
     * @return
     */
    List<StudentInfo> findBatchByDepartmentId(Integer departmentId);

    /**
     * author: WheelChen
     * date: 2017/9/18
     * function: 根据专业id批量查找学生信息
     *
     * @param majorId
     * @return
     */
    List<StudentInfo> findBatchByMajorId(Integer majorId);

    /**
     * author: WheelChen
     * date: 2017/9/16
     * function: 根据班级id查找学生信息
     *
     * @param classId
     * @return
     */
    List<StudentInfo> findBatchByClassId(Integer classId);

    /**
     * author: WheelChen
     * date: 2017/9/18
     * function: 根据系id批量删除学生表信息
     *
     * @param departmentId
     * @return
     */
    int removeBatchByDepartmentId(Integer departmentId);

    /**
     * author: WheelChen
     * date: 2017/9/18
     * function: 根据专业id批量删除学生表信息
     *
     * @param majorId
     * @return
     */
    int removeBatchByMajorId(Integer majorId);

    /**
     * author: WheelChen
     * date: 2017/9/16
     * function: 根据班级id批量删除学生表信息
     *
     * @param classId
     * @return
     */
    int removeBatchByClassId(Integer classId);

}
